package cn.stylefeng.overall.modular.config.common;

import cn.hutool.core.util.StrUtil;
import cn.stylefeng.overall.modular.config.model.StandardArea;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

/**
 * 区域静态参数
 */
public class AreaStaticParam {

    /**
     * 区域信息列表，所有的区域信息
     */
    public static List<StandardArea> areaList = new ArrayList<StandardArea>();

    /**
     * 获取所有的区域列表
     * @return
     */
    public static List<StandardArea> getAllAreaList() {
        return areaList;
    }

    /**
     * 根据区域编号获取区域信息
     * @param id 区域编号
     * @return
     */
    public static StandardArea getAreaById(String id) {
        if(StrUtil.isEmpty(id)) {
            return null;
        }
        List<StandardArea> fas = filter(areaList, (area)-> id.equals(((StandardArea)area).getId()));
        if(fas != null && fas.size() > 0) {
            return fas.get(0);
        }
        return null;
    }

    /**
     * 根据上级编号获取下级区域信息
     * @param parentId 上级编号
     * @return
     */
    public static List<StandardArea> getAreaByParentId(String parentId) {
        if(StrUtil.isEmpty(parentId)) {
            return null;
        }
        return filter(areaList, (area)-> parentId.equals(((StandardArea)area).getParentId()));
    }

    /**
     * 使用lambda过滤器获取符合条件的区域信息
     * @param areas 区域列表
     * @param condition 条件
     * @return
     */
    public static List<StandardArea> filter(List<StandardArea> areas, Predicate condition) {
        List<StandardArea> filterAreas = new ArrayList<StandardArea>();
        for(StandardArea area: areas) {
            if (condition.test(area)) {
                filterAreas.add(area);
            }
        }
        return filterAreas;
    }

}
